home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Penthouse Guide to Cybersex
/
Penthouse Guide to Cybersex.iso
/
pc
/
pho
/
phos.lzh
/
NEWSETUP.C
< prev
next >
Wrap
C/C++ Source or Header
|
1994-07-27
|
60KB
|
1,888 lines
/**
*** NEWSETUP.C -- signup program****** Ken Sedlund Oct, 1993
***
**/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <bios.h>
#include <stdlib.h>
#include <string.h>
#include <io.h> /** access function **/
#include <process.h> /** spawn function **/
#include <dos.h> /** sleep function **/
#include <mem.h> /** memset function **/
#include <ctype.h> /** isalpha function **/
#include "g4char.h"
#include "ctext.h" /** text functions **/
#include "comm.c" /** include comm functions **/
#define VERSION "Version 1.00.01"
#define INFO_RETURN 0x1C0D
#define TOP_OFFSET 8
#define BOTTOM_OFFSET 4
#define README_FILE "newsetup.txt"
#define PHONE_FILE "phone.lst"
#define INSTRU_FILE "instru.txt"
#define LINES_PER_SCREEN 17
#define MAX_LINES 800
#define MAX_LINE_LEN 80
#define INVALID -1
#define SUCCESS 0
#define ERROR 1
#define ERROR2 2
#define MAX_COM_NUM 4
#define NUM_SPD_TYPE 5
#define COM_FOUND 2
#define MODEM_FOUND 1
// exact length for each entry in $$ddir.trm and $$curset.trm files
#define DDIR_ENTRY_LEN 160
#define CURSET_LEN 10
// exact length for each field in $$ddir.trm file
#define SETUP_NAME_LEN 21
#define PHONE_NUM_LEN 27
#define INIT_CMD_LEN 21
#define PORT_INFO_LEN 9
#define ID_LEN 13
#define PWD_LEN 9
#define X25_TYPE_LEN 2
#define X25_HOST_LEN 21
#define X25_PWD_LEN 21
#define UNDEFINED_FLD_LEN 16
typedef struct term_ts /* entry structure for $$ddir.trm file */
{ // position
char setup_name[SETUP_NAME_LEN]; // 1 - 21
char phone_num[PHONE_NUM_LEN]; // 22 - 48
char init_cmd[INIT_CMD_LEN]; // 49 - 69
char port_info[PORT_INFO_LEN]; // 70 - 78
char id[ID_LEN]; // 79 - 91
char pwd[PWD_LEN]; // 92 - 100
char x25_type[X25_TYPE_LEN]; // 101 - 102
char x25_host[X25_HOST_LEN]; // 103 - 123
char x25_pwd[X25_PWD_LEN]; // 124 - 144
char undefined_fld[UNDEFINED_FLD_LEN]; // 145 - 160
} term_s;
int FileCopy( const char *source, const char *dest );
int NewSetup( void );
int GetSetupName( void );
int GetId( void );
int GetPwd( void );
int IdPwdSetupPrompt(int x, int y, int length, char *str, int IdPwdSetup);
int ValidIdPwd(char *str);
int IsInsertPwd( void );
int GetComPort( void );
int SearchPort( int *com);
int SearchModem(int comport, long speed, char *init_str);
int GetModemInitStr( char port );
int ValidInitStr( char *init_str, char port);
int GetBaudRate( void );
//int PromptPhoneNum( void );
//int GetPhoneStr( int x );
//int ValidPhoneNum(char *phonestr);
int SetupFiles( void );
void PutStr(char *source, char *destination, int dest_len, FILE *fp);
int Info( int found );
int Info2( int found );
int Display( int start, int bottom );
int LoadFile( char *fname );
int GetFile( char *filename );
int GetNum( int info1_2 );
int GetLocalPhone( char *num, int info1_2 );
void kill_data( char **data );
void HighliTxt(int line_number, int positiony, int bgcolor, int txtcolor);
int SelectedTxt(int line_number, int y);
WINDOW top = {2,2,78,5};
WINDOW menu = {1,7,80,24};
extern char *sys_errlist[];
extern int errno;
char **file_buffer = (char**) NULL;
int num_lines;
char area_code[4];
term_s term; // global structure for $$ddir.trm file
char select_com; // selected serial port
char modem_resp[1024]; // modem response string
char service[MAX_LINE_LEN]; // online service name
int ispwd;
/**
*** main -- main routine
**/
void main( void )
{
int savex, savey, ans, key, Ok = 0, ret, i;
struct text_info t;
unsigned char saveattr;
WINDOW w = {1,1,80,25};
gettextinfo( &t );
saveattr = t.attribute;
highvideo();
colorbackground( BLUE );
window( 1,1,80,25 );
clrscr();
cputsxy(64,1,VERSION);
colorwindow( top, CYAN, -1, 1 );
memset(&term,0,sizeof(term_s)); // intialize structure
cputs_center( 2, "Create X.25 Setups" );
if ( access( "$$ddir.trm", 00 ) != 0 )
{
colorwindow( menu, BLUE, -1, 0 );
textcolor(WHITE);
cputs_center(6, "Cannot find <$$ddir.trm> file in the current directory.");
cputs_center(8, "Be sure to copy the X.25 Setup software files to the");
cputs_center(10,"Access software directory and run it from there.");
cputs_center(12,"Press any key to quit");
no_cursor();
getch();
colorwindow( w, BLACK, -1, 0 );
clrscr();
exit(0);
}
for( ;; )
{
Ok = 0;
colorwindow( menu, BLUE, -1, 0 );
textcolor(WHITE);
cputsxy( 30, 5, "F1 INFORMATION" );
cputsxy( 30, 7, "F2 CREATE NEW SETUP" );
cputsxy( 30, 9, "F3 PHONE BOOK" );
cputsxy( 30, 11,"ESC EXIT" );
no_cursor();
while( !Ok )
{
while( bioskey(1) == 0);
key = bioskey(0);
switch( key )
{
case F2 :
ret = NewSetup( ); // create new setup
if (ret == SUCCESS)
{
colorwindow( menu, BLUE, -1, 0 );
cputs_center( 5, "A new setup has been created.");
cputs_center( 7, "Press ESC to quit, press ENTER "
"to run the Access software." );
cputs_center( 9, "At Access Screen, "
"press 'C' to connect" );
cputs_center(11, "If you have any problem, "
"contact customer service at 1-800-547-4727");
do
{
no_cursor();
key=getch();
} while (key != ESC && key != RETURN);
/// sleep( 1 );
/// if( bioskey(1) ) bioskey(0);
/// key=getch();
if (key!=ESC)
{
colorwindow( w, BLACK, -1, 0 );
if( spawnl( P_WAIT, "terminal.exe", NULL ) < 0 )
{
cputs_center( 16, "ERROR - spawn terminal.exe : %s",
sys_errlist[errno] );
cputs_center( 17, "Press any key");
no_cursor();
getch();
}
}
colorwindow( w, BLACK, -1, 0 );
clrscr();
exit(0);
}
Ok = 1;
break;
case F1 :
if( GetFile( README_FILE ) <= 0 )
break;
Info(1);
Ok = 1;
kill_data( file_buffer );
break;
case F3 :
GetNum( 1 );
kill_data( file_buffer );
Ok = 1;
break;
case ESC_SCAN:
/*kill_data( file_buffer );*/
window( 1,1,80,25 );
textattr( saveattr );
clr_line( 25 );
gotoxy( 1, 24 );
exit(0);
} /** END switch key **/
} /** END while !Ok **/
} /** END for ;; **/
} /** END function main **/
/**
*** NewSetup -- instruct user step by step to create a new setup
**/
int NewSetup( )
{
int i, savex, savey, ret, key, ans, code = SUCCESS;
// colorwindow( menu, BLUE, -1, 0 );
// textcolor(WHITE);
if (GetSetupName() == ERROR)
return ERROR;
textcolor(WHITE); // reset text color
// create a new setup entry
if (( code = SetupFiles( )) == ERROR )
{
cputs_center( 16, "Error in creating new setup. Contact customer "
"service at 1-800-547-4727");
cputs_center( 17, "Press any key");
no_cursor();
getch();
}
return( code );
}
/**
*** GetSetupName -- prompt user for new setup name
**/
int GetSetupName( )
{
int savex, savey, x, y, i, j, eol, ans, ret;
char setup[SETUP_NAME_LEN];
for (;;)
{
colorwindow( menu, BLUE, -1, 0 );
textcolor(WHITE);
cputs_center( 11, "Press ESC to go back" );
cputsxy(20,5, "Enter new SETUP NAME: " );
x = wherex();
y = wherey()+6;
if ( IdPwdSetupPrompt(x,y,SETUP_NAME_LEN,setup,2) == SUCCESS)
strcpy(term.setup_name,setup); // save to global
else return ERROR;
ret = GetId(); // get password
if (ret == SUCCESS)
break;
} // for (;;)
return SUCCESS;
}
/**
*** GetId -- prompt user for id
**/
int GetId( )
{
int savex, savey, x, y, i, j, eol, ans, ret;
char id[ID_LEN];
for (;;)
{
colorwindow( menu, BLUE, -1, 0 );
textcolor(WHITE);
cputs_center( 11, "Press ESC to go back" );
cputsxy(20,5, " Enter your ID: " );
x = wherex();
y = wherey()+6;
if ( IdPwdSetupPrompt(x,y,ID_LEN,id,1) == SUCCESS)
strcpy(term.id,id); // save to global
else return ERROR;
ret = GetPwd(); // get password
if (ret == SUCCESS)
break;
} // for (;;)
return SUCCESS;
}
/**
*** GetPwd -- prompt user for password
**/
int GetPwd( )
{
int savex, savey, x, y, i, j, eol, ans, ret;
char pwd[PWD_LEN];
for (;;)
{
memset(term.pwd,NULL,PWD_LEN);
if ( IsInsertPwd() == ERROR )
return ERROR;
if (ispwd)
{
colorwindow( menu, BLUE, -1, 0 );
textcolor(WHITE);
cputs_center( 11, "Press ESC to go back" );
cputsxy(20,5, " Enter your PASSWORD: " );
x = wherex();
y = wherey()+6;
if ( IdPwdSetupPrompt(x,y,PWD_LEN,pwd,0) == SUCCESS)
strcpy(term.pwd,pwd); // save to global
else return ERROR;
}
ret = GetComPort(); // get com ports
if (ret == SUCCESS)
break;
} // do loop
return SUCCESS;
}
int IdPwdSetupPrompt(int x, int y, int length, char *str, int IdPwdSetup)
{
int i, eol, savex, savey, tempx, tempy, ret = SUCCESS;
char temp[30];
memset(temp,NULL,30);
memset(str,NULL,length);
if (IdPwdSetup == 2) // setupname
strcpy(str,term.setup_name);
else if (IdPwdSetup == 1)
strcpy(str,term.id);
do
{
eol = i = 0;
window(x,y,x+length-1,y);
// textbackground(RED);
// textcolor(YELLOW);
textattr(0x4E);
if (IdPwdSetup)
{
cputs(str);
i = strlen(str);
}
savex = wherex();
savey = wherey();
do {
gotoxy( savex, savey );
clreol();
if ( i == length-1 )
{
if (IdPwdSetup)
{
str[length-1]=NULL;
cputsxy(1,1,str);
}
else
{
temp[length-1]=NULL;
cputsxy(1,1,temp);
}
}
if (IdPwdSetup)
str[i] = getche() ;
else
{
str[i] = getch() ;
if (str[i] != BACK_SPACE && str[i] != RETURN)
{
temp[i]='*';
tempx=wherex()-1;tempy=wherey()-1;
gotoxy(tempx,tempy);
cputs("*");
}
}
switch( str[i] )
{
case ESC: return ERROR;
case RETURN : eol = 1; break;
case BACK_SPACE :
if( i > 0 )
{
savex--; i--;
}
break;
default :
if ( i < length-1 )
{
savex++; i++;
}
}
} while( !eol );
str[i]=NULL;
if (IdPwdSetup != 2)
ret = ValidIdPwd(str);
} while (ret == INVALID);
return SUCCESS;
}
/**
*** ValidIdPwd -- check for empty or leading blank password and id
**/
int ValidIdPwd(char *str)
{
int ret = SUCCESS;
if (strlen(str) == 0) // empty string
ret = INVALID;
if (str[0] == ' ') // leading blank string
ret = INVALID;
if (ret == INVALID)
{
window(1,24,80,24);
// textcolor(WHITE);
// textbackground(BLUE);
textattr(0x1F);
cputs_center(1,"Invalid string. Press any key");
no_cursor();
getch();
window(1,24,80,24);
clrscr();
return ret;
}
return ret;
}
/**
*** IsInsertPwd -- ask if user want to insert password into setup file
**/
int IsInsertPwd( )
{
int savex, savey, ans;
colorwindow( menu, BLUE, -1, 0 );
textcolor(WHITE);
cputs_center( 7, "ESC to go back");
textcolor(YELLOW);
cputsxy(3,17, "NOTE: If you choose 'N', you will be asked for "
"password each time you logon.");
textcolor(WHITE);
cputs_center( 5, "Put password into the new setup [Y/N]: ");
savex = wherex();
savey = wherey();
for (;;)
{
gotoxy( savex, savey );
clreol();
if ((ans=getche()) == ESC)
return ERROR;
if (ans == 'y' || ans =='Y' || ans == 'n' || ans == 'N')
{
if (ans == 'y' || ans == 'Y')
ispwd = 1;
else
ispwd = 0;
delay( 300 );
break;
}
} // for (;;)
return SUCCESS;
}
/**
*** GetComPort -- get available serial communication ports
**/
int GetComPort( )
{
int i, j, ret, savex, savey, com_found, is_modem, eol;
int com[MAX_COM_NUM];
char temp[2];
for (;;)
{
colorwindow( menu, BLUE, -1, 0 );
textcolor(WHITE);
is_modem = com_found = 0;
cputs_center(5, "Searching for COM port(s), please wait...");
no_cursor();
// search ports availability
if ( (ret=SearchPort(com)) > 0 )
com_found = 1;
// search modem availability
for (i=0;i<MAX_COM_NUM;++i)
if (com[i])
if ( (com[i]=SearchModem(i+1,2400,"AT")) == 1)
is_modem = 1;
else
if ((com[i]=SearchModem(i+1,2400,"ATE1Q0")) == 1)
is_modem = 1;
for (i=0;i<MAX_COM_NUM;++i)
if (!com[i])
if ( (com[i]=SearchModem(i+1,2400,"AT")) == 1)
is_modem = 1;
else
if ((com[i]=SearchModem(i+1,2400,"ATE1Q0")) == 1)
is_modem = 1;
else
com[i]=0;
clr_line(5);
if (!com_found)
{
textcolor(YELLOW);
cputs_center( 5, "No COM port found" );
textcolor(WHITE);
cputs_center( 7, "Press ESC to go back" );
return ERROR;
}
else
{
cputs_center( 9, "Press ESC to go back" );
cputs_center( 5, "Found following COM port(s): " );
for (i=0;i<MAX_COM_NUM;++i)
if (com[i]) cprintf("%d ",i+1);
textcolor(YELLOW);
if (is_modem)
{
cputs_center( 7, "Found modem in COM ports: " );
for (i=0;i<MAX_COM_NUM;++i)
if (com[i]==MODEM_FOUND) cprintf("%d ",i+1);
}
else
cputs_center( 7, "Modem is not found or not ready");
textcolor(WHITE);
cputs_center( 11, "Enter COM port number: ");
}
savex = wherex();
savey = wherey();
window(savex,savey+6,savex+1,savey+6);
// textbackground(RED);
// textcolor(YELLOW);
textattr(0x4E);
savex = wherex();
savey = wherey();
i = eol = 0;
do
{
gotoxy( savex, savey );
clreol();
if ( i == 1 )
{
temp[1]=NULL; cputsxy(1,1,temp);
}
temp[i] = getche() ;
switch( temp[i] )
{
case ESC : return ERROR;
case RETURN :
if ( i > 0 )
{
j=atoi(temp)-1;
if (j >= 0 && j < MAX_COM_NUM)
if (com[j])
eol = 1;
}
break;
case BACK_SPACE :
if( i > 0 )
{
savex--; i--;
}
break;
default :
if( i < 1 )
{
savex++; i++;
}
}
} while( !eol );
switch (temp[0]) // save to global
{
case '1': term.port_info[1] = 0x01; break;
case '2': term.port_info[1] = 0x02; break;
case '3': term.port_info[1] = 0x03; break;
case '4': term.port_info[1] = 0x04; break;
default : term.port_info[1] = 0x00; break;
}
ret = GetModemInitStr(temp[0]);
if (ret == SUCCESS)
break;
} // for (;;)
select_com = temp[0];
return SUCCESS;
}
/**
*** SearchPort -- search for available ports
**/
int SearchPort(int *com)
{
int i, found = 0;
char tempstr[256];
int portbase;
int far *bda;
for (i=0;i < MAX_COM_NUM; ++i)
com[i] = 0;
for (i=0;i < MAX_COM_NUM; ++i)
{
bda =(int far *)MK_FP(0x40, i*2 );
portbase = *bda;
sprintf(tempstr,"%04X",portbase);
if (!strcmp("03F8",tempstr))
{
found = 1;
com[0] = COM_FOUND;
}
else if (!strcmp("02F8",tempstr))
{
found = 1;
com[1] = COM_FOUND;
}
else if (!strcmp("03E8",tempstr))
{
found = 1;
com[2] = COM_FOUND;
}
else if (!strcmp("02E8",tempstr))
{
found = 1;
com[3] = COM_FOUND;
}
}
return found;
}
/**
*** SearchModem -- search for modem
**/
int SearchModem(int comport, long speed, char *init_str)
{
int i, j;
int found = COM_FOUND; // COM port is assummed found
// before searching for modem
char tempstr[256];
unsigned a, a1;
memset(modem_resp,NULL,1024);
open_comm(comport,speed,1); // open com port
flush_comm_buffer(); // clear buffer
/* turn on Data Terminal Ready */
raise_dtr();
sprintf(tempstr,"%s\r",init_str);
i = j = 0;
for (;;)
{
if(comm_char()) /* if a character has been received */
{
a=comm_in();
if ( j < 1024 )
modem_resp[j] = a;
++j;
if (a1=='O' && a=='K')
{
found=MODEM_FOUND; break;
}
a1=a;
}
if (i<strlen(tempstr))
{
comm_out(tempstr[i]);
delay(300);
}
++i;
if (i>strlen(tempstr)+3072) break; // less buffer < 4k
} // for(;;)
/* turn off Data Terminal Ready */
drop_dtr();
/* close the port and exit */
close_comm();
return found;
}
/**
*** -- GetModemInitStr -- get modem init string
**/
int GetModemInitStr(char port)
{
int x, y, savex, savey, i, j, eol, key, ret, ans;
char initstr[INIT_CMD_LEN];
do
{
colorwindow( menu, BLUE, -1, 0 );
textcolor(YELLOW);
cputsxy(1,2," NOTE: Some modems need a special initialization string "
"to operate properly");
cputsxy(1,3," with the access software. Most will work with the "
"default init string of ");
cputsxy(1,4," 'AT&F'.");
cputsxy(1,14," If you need assistance building a modem init string, "
"please call customer");
cputsxy(1,15," service at 1-800-547-4727.");
textcolor(WHITE);
strcpy(initstr,"AT&F");
cputs_center( 8, "Press ESC to go back" );
cputsxy(15,6, "Enter your modem init string: " );
x = savex = wherex();
y = savey = wherey();
for (;;) // for loop1
{
eol = 0;
i = strlen(initstr);
window(x,y+6,x+INIT_CMD_LEN-1,y+6);
// textbackground(RED);
// textcolor(YELLOW);
textattr(0x4E);
cputs( initstr ); // display default init string
savex=wherex();
savey=wherey();
do {
gotoxy( savex, savey );
clreol();
if ( i == INIT_CMD_LEN-1 )
{
initstr[INIT_CMD_LEN-1] = NULL;
cputsxy(1,1,initstr);
}
initstr[i] = getche() ;
switch( initstr[i] )
{
case ESC : return ERROR;
case RETURN : eol = 1; break;
case BACK_SPACE :
if( i > 0 )
{
savex--; i--;
}
break;
default :
if ( i < INIT_CMD_LEN-1 )
{
savex++; i++;
}
}
} while( !eol );
initstr[i]=NULL;
strcpy(term.init_cmd,initstr); // save to global
// textbackground(BLUE);
// textcolor(WHITE);
textattr(0x1F);
window(1,14,80,14); clrscr();
window(1,17,80,17);
cputs_center( 1, "Do you wish to test the modem init string "
"[Y/N] ");
savex = wherex();
savey = wherey();
for (;;)
{
gotoxy( savex, savey );
clreol();
ans=getche();
if (ans == 'y' || ans =='Y' || ans == 'n' || ans == 'N')
{
clrscr();
break;
}
}
if (ans == 'y' || ans == 'Y')
{
ret=ValidInitStr(term.init_cmd,port);
if ( ret == SUCCESS) break; // get out of for loop1
}
else
break; // get out of for loop1
window(1,14,80,21);
cputs_center( 1, "Press ESC to go back" );
textcolor(YELLOW);
cputsxy(1,7," If you need assistance building a modem init string, "
"please call customer");
cputsxy(1,8," service at 1-800-547-4727.");
textcolor(WHITE);
}
} while ( GetBaudRate() != SUCCESS );
return SUCCESS;
}
/**
*** ValidInitStr -- check modem init string
**/
int ValidInitStr( char *init_str, char port)
{
int i, savex, savey, ans, com=0;
char temp[256];
switch (port)
{
case '1': com = 1; break;
case '2': com = 2; break;
case '3': com = 3; break;
case '4': com = 4; break;
}
window(1,14,80,21);
clrscr();
cputs_center(1,"Testing modem init string, please wait...");
for (i=0; i < strlen(init_str); ++i) // convert string to upper case
init_str[i] = toupper(init_str[i]);
SearchModem(com, 2400, init_str);
if (strlen(modem_resp) == 0)
sprintf(temp,"Modem is not found or not ready");
else
{
if (!strcmp("AT\\S",init_str))
SearchModem(com, 2400, "ATE1Q0");
sprintf(temp,"Modem is responding with:");
}
// display modem response
// textbackground(BLUE);
// textcolor(YELLOW);
textattr(0x1E);
clrscr();
cputs_center(1,temp);
window(38,15,80,25);
cputs(modem_resp);
window(1,24,80,25);
cputs_center( 1, "If modem responses with an 'OK', it indicates a valid "
"init string");
textcolor(WHITE);
cputs_center( 2, "Continue [Y/N] ");
savex = wherex();
savey = wherey();
for (;;)
{
gotoxy( savex, savey );
clreol();
ans=getche();
if (ans == 'y' || ans =='Y' || ans == 'n' || ans == 'N')
{
window(1,14,80,25);
clrscr();
break;
}
}
if (ans == 'y' || ans == 'Y')
return SUCCESS;
else
return ERROR;
}
/**
*** GetBaudRate -- get baud rate for setting new entry
**/
int GetBaudRate( )
{
int savex, savey, ret;
int i, port=0, is_modem, recommend, reset, eol;
long baudrate;
char temp[256];
do
{
switch (term.port_info[1])
{
case 0x01: port = 1; break;
case 0x02: port = 2; break;
case 0x03: port = 3; break;
case 0x04: port = 4; break;
default: port = 0; break;
}
is_modem = 0;
colorwindow( menu, BLUE, -1, 0 );
textcolor(WHITE);
cputs_center( 3, "Available speeds");
cputs_center( 4, "1. 1200 2. 2400 3. 4800 4. 9600 5. 19200");
sprintf(temp,"COM%d",port);
cputsxy(10,7,"Searching maximum speed for modem at ");
textcolor(YELLOW);
cputs(temp);
textcolor(WHITE);
cputs(", please wait...");
no_cursor();
if (port > 0)
{
sprintf(temp,"AT");
reset = 0;
for (i=0;i<NUM_SPD_TYPE;++i)
{
switch (i)
{
case 0: baudrate = 1200; break;
case 1: baudrate = 2400; break;
case 2: baudrate = 4800; break;
case 3: baudrate = 9600; break;
case 4: baudrate = 19200; break;
// case 5: baudrate = 38400; break;
// case 6: baudrate = 57600; break;
}
ret=SearchModem(port,baudrate,temp);
if (ret)
{
if (ret != 1 && !reset)
{
sprintf(temp,"ATE1Q0");
reset = 1;
ret=SearchModem(port,baudrate,temp);
}
if (ret == 1)
{
if (!is_modem)
is_modem = 1;
switch (i)
{
case 0: recommend = 1; break;
case 1: recommend = 2; break;
case 2: recommend = 3; break;
case 3: recommend = 4; break;
case 4: recommend = 5; break;
// case 5: recommend = 6; break;
// case 6: recommend = 7; break;
}
}
}
}
}
clr_line( 7 );
if (!is_modem)
{
textcolor(YELLOW);
cputs_center(7,"Modem is not found or not ready");
}
else
{
cputs_center(7,"Found maximum speed at: ");
textcolor(YELLOW);
switch (recommend)
{
case 1: cputs("1200"); break;
case 2: cputs("2400"); break;
case 3: cputs("4800"); break;
case 4: cputs("9600"); break;
case 5: cputs("19200"); break;
// case 6: cputs("38400"); break;
// case 7: cputs("57600"); break;
}
}
textcolor(WHITE);
cputs_center(11, "Press ESC to go back");
cputs_center(13, "If you have 2400 bps modem ---------------------->> select speed option 2");
cputs_center(14, "If you have 2400 bps modem with V.42 or MNP5 ---->> select speed option 4");
cputs_center(15, "If you have 9600 bps modem ---------------------->> select speed option 4");
cputs_center(16, "If you have 9600 bps modem with V.24 or MNP5 ---->> select speed option 5");
cputs_center(17, "If you have 14400 bps modem ---------------------->> select speed option 5");
// textcolor(YELLOW);
// cputs_center(17, "NOTE: Most PCs can not handle speed greater than "
// "19200");
// textcolor(WHITE);
cputs_center( 9, "Pick a speed: ");
savex = wherex();
savey = wherey();
window(savex,savey+6,savex+1,savey+6);
// textbackground(RED);
// textcolor(YELLOW);
textattr(0x4E);
savex = wherex();
savey = wherey();
i = eol = 0;
do
{
gotoxy( savex, savey );
clreol();
if ( i == 1)
{
temp[1]=NULL; cputsxy(1,1,temp);
}
temp[i] = getche();
switch( temp[i] )
{
case ESC : return (ERROR);
case RETURN :
if ( i > 0 )
if ( temp[0] >= '1' && temp[0] <= '7')
eol = 1;
break;
case BACK_SPACE :
if ( i > 0)
{
savex--; i--;
}
break;
default:
if (i < 1)
{
savex++; i++;
}
}
} while ( !eol );
if (temp[0] == '1') term.port_info[0]=0x00;
else if (temp[0] == '2') term.port_info[0]=0x01;
else if (temp[0] == '3') term.port_info[0]=0x02;
else if (temp[0] == '4') term.port_info[0]=0x03;
else if (temp[0] == '5') term.port_info[0]=0x04;
else if (temp[0] == '6') term.port_info[0]=0x05;
else if (temp[0] == '7') term.port_info[0]=0x06;
ret = GetNum(2); // get phone list
kill_data( file_buffer );
} while (ret != SUCCESS);
return ret;
}
/**
*** -- PromptPhoneNum -- prompt for phone number
**/
///int PromptPhoneNum( )
///{
/// int savex, savey, ret;
///
/// window(1,23,80,23);
/// cputs_center( 1, " Examples: 222-5555 or 9,, 222-5555 or 1 6192225555 or "
/// "9,, 619-222-5555 ");
/// window(1,24,80,24);
/// cputsxy(15,1,"Enter phone number: ");
///
/// savex = wherex();
/// savey = wherey();
/// gotoxy(savex,savey);
/// for (;;) // Get phone number
/// {
/// ret = GetPhoneStr(savex);
/// if (ret == ERROR || ret == SUCCESS)
/// break;
/// else
/// {
/// window(1,25,80,25);
/// textcolor(YELLOW);
/// cputs_center( 1, "Invalid phone number. Press any key");
/// textcolor(WHITE);
/// no_cursor();
/// getch();
/// clrscr();
/// }
/// }
/// return ret;
///}
///
////**
///*** GetPhoneStr -- get phone number string
///**/
///int GetPhoneStr(int x)
///{
/// int savex, savey, i, j, eol;
/// char phonestr[PHONE_NUM_LEN];
///
/// savex = x;
/// i = eol = 0;
/// window(savex,24,savex+PHONE_NUM_LEN-1,24);
///// textbackground(RED);
///// textcolor(YELLOW);
/// textattr(0x4E);
/// savex = wherex();
/// savey = wherey();
/// do {
/// gotoxy( savex, savey );
/// clreol();
/// if ( i == PHONE_NUM_LEN-1 )
/// {
/// phonestr[PHONE_NUM_LEN-1]=NULL;
/// cputsxy(1,1,phonestr);
/// }
/// phonestr[i] = getche() ;
/// switch( phonestr[i] )
/// {
/// case ESC: return ERROR;
/// case RETURN : eol = 1; break;
/// case BACK_SPACE :
/// if( i > 0 )
/// {
/// savex--; i--;
/// }
/// break;
/// default :
/// if ( i < PHONE_NUM_LEN-1 )
/// {
/// savex++; i++;
/// }
/// }
/// } while( !eol );
/// phonestr[i]=NULL;
/// memset(term.phone_num,NULL,PHONE_NUM_LEN);
/// for (i=0;i<strlen(phonestr);++i) // save to global phone_num variable
/// term.phone_num[i]=phonestr[i];
///
///// textbackground(BLUE);
///// textcolor(WHITE);
/// textattr(0x1F);
/// if (ValidPhoneNum(term.phone_num) == INVALID)
/// return INVALID;
/// else
/// return SUCCESS;
///}
///
////**
///*** -- ValidPhoneNum -- check for valid phone number enter by user
///**/
///int ValidPhoneNum(char *phonestr)
///{
/// int i, no_blank = 0;
///
/// if (strlen(phonestr) == 0)
/// return INVALID;
///
/// for (i=0; i < strlen(phonestr); ++i)
/// {
/// if (!no_blank)
/// {
/// if (phonestr[i] != ' ')
/// no_blank = 1;
/// }
/// if (isalpha(phonestr[i]))
/// return INVALID;
/// }
/// if (!no_blank) return INVALID;
/// return SUCCESS;
///}
/**
*** SetupFiles -- create new setup file
**/
int SetupFiles( )
{
FILE *ddir, *curset, *cfg;
int ans, ret, i, savex, savey, filesize, is_pwd, entry_pos;
char temp[256];
div_t x;
colorwindow( menu, BLUE, -1, 0 );
textcolor(WHITE);
if ((ddir = fopen("$$ddir.trm","at+")) == NULL)
{
cputs_center( 16, "Error %d openning file $$ddir.trm : %s",
errno, sys_errlist[errno] );
cputs_center( 17, "Press any key");
no_cursor();
getch();
return ERROR;
}
if ((curset = fopen("$$curset.trm","wt+")) == NULL)
{
cputs_center( 16, "Error %d openning file $$curset.trm : %s",
errno, sys_errlist[errno] );
cputs_center( 17, "Press any key");
fclose(ddir);
no_cursor();
getch();
return ERROR;
}
if ((cfg = fopen("$$signup.cfg","rt")) == NULL)
{
cputs_center( 16, "Error %d openning file $$signup.cfg : %s",
errno, sys_errlist[errno] );
cputs_center( 17, "Press any key");
fclose(ddir);
fclose(curset);
no_cursor();
getch();
clr_line( 16 );
return ERROR;
}
/* write new entry info to $$ddir.trm */
for (i=0;i<SETUP_NAME_LEN;++i) // write setup name
fputc(term.setup_name[i],ddir);
for (i=0;i<PHONE_NUM_LEN;++i) // write phone number
fputc(term.phone_num[i],ddir);
for (i=0;i<INIT_CMD_LEN;++i) // write modem init command
fputc(term.init_cmd[i],ddir);
// speed set in GetBaudRate()
// com port set in GetComPort()
term.port_info[2]=0x01; // default connection x25
term.port_info[3]=0x01; // default dialing = tone
term.port_info[4]=0x01; // default speaker = on
term.port_info[5]=0x01; // ???
switch( term.port_info[1] )
{
case 0x01:
term.port_info[6]=0x04; // irq number
term.port_info[7]=0xF8; // port address
term.port_info[8]=0x03;
break;
case 0x02:
term.port_info[6]=0x03;
term.port_info[7]=0xF8;
term.port_info[8]=0x02;
break;
case 0x03:
term.port_info[6]=0x04;
term.port_info[7]=0xE8;
term.port_info[8]=0x03;
break;
case 0x04:
term.port_info[6]=0x03;
term.port_info[7]=0xE8;
term.port_info[8]=0x02;
break;
default:
term.port_info[6]=0x00;
term.port_info[7]=0x00;
term.port_info[8]=0x00;
break;
}
for (i=0;i<PORT_INFO_LEN;++i) // write port information
fputc(term.port_info[i],ddir);
for (i=0;i<ID_LEN;++i) // write id name or number
fputc(term.id[i],ddir);
for (i=0;i<PWD_LEN;++i) // write password
fputc(term.pwd[i],ddir);
term.x25_type[0] = 0x00; // default carrier is 1st entry
term.x25_type[1] = 0x00;
for (i=0;i<X25_TYPE_LEN;++i) // write x25 information
fputc(term.x25_type[i],ddir); // write x25 carrier
// write x25 host name
for (i=0; i < 8; ++i)
fgets(temp,MAX_LINE_LEN,cfg); // get x25 host name
PutStr(temp,term.x25_host,X25_HOST_LEN,ddir);
for (i=0;i<X25_PWD_LEN;++i) // password is empty
fputc(term.x25_pwd[i],ddir); // not required
for (i=0;i<UNDEFINED_FLD_LEN;++i) // undefined field
fputc(term.undefined_fld[i],ddir);
fseek(ddir, 0, SEEK_SET); // goto beginning of file
filesize = 0;
while (fgetc(ddir) != EOF) // get size of file
++filesize;
x = div(filesize,sizeof(term_s)); // divide by sizeof a entry
entry_pos = x.quot - 1; // to get number of entries,
// subtract 1 to get the
fputc(entry_pos,curset); // positon of the new entry
// write new info to $$curset.trm file
for (i=1;i<CURSET_LEN;++i)
fputc(NULL,curset);
fclose(curset);
fclose(ddir);
fclose(cfg);
return SUCCESS;
}
/**
*** PutStr -- copy string and put to a file
**/
void PutStr(char *source, char *destination, int dest_len, FILE *fp)
{
int i;
for (i=0;i<strlen(source);++i)
if (!(source[i] == '\n' || i == dest_len))
destination[i]=source[i];
for (i=0;i<dest_len-1;++i)
fputc(destination[i],fp);
fputc(NULL,fp);
}
/**
*** Info -- display file in scrollable window
**/
int Info(int found)
{
int start = 0, ret, savex, savey, key=0;
char temp[MAX_LINE_LEN+1];
window( 1, 7, 80, 24 );
clrscr();
textcolor( YELLOW );
cputs_center(1, "Use cursor keys to scroll text. Press ESC to go back.");
window( 1, 8, 80, 25 );
if ( !found )
if ( !found )
{
sprintf(temp," No phone number found for this area code: %s ",area_code);
cputs_center(17, temp);
}
textcolor( WHITE );
start = Display( start, 0 );
no_cursor();
for( ;; )
{
while( bioskey( 1 ) == 0 ); /** wait for a key **/
key = bioskey( 0 );
switch( key )
{
case UP: /** display previous line **/
if( start <= LINES_PER_SCREEN ) break;
start = Display( ( start - LINES_PER_SCREEN ) - 1, 0 );
break;
case DOWN: /** display next line **/
if( start >= num_lines ) break;
start = Display( ( start - LINES_PER_SCREEN ) + 1, 0 );
break;
case PGUP: /** display prev page **/
if( start <= LINES_PER_SCREEN ) break;
start = Display( start - ( LINES_PER_SCREEN * 2 ), 0 );
break;
case PGDN: /** display next page **/
if( start >= num_lines ) break;
start = Display( start - 1, 0 );
break;
case HOME: /** go to top **/
if( start <= LINES_PER_SCREEN ) break;
start = Display( 0, 0 );
break;
case END: /** go to end **/
if( start >= num_lines ) break;
start = Display( num_lines - LINES_PER_SCREEN, 0 );
break;
case ESC_SCAN:
case CTRL_C:
clr_line( 18 );
window( 1, 1, 80, 25 );
return ERROR;
} /** END-SWITCH key **/
no_cursor();
}
}
/**
*** Info2 -- display file in scrollable window
**/
int Info2(int found)
{
int start = 0, ret, savex, savey, key=0;
int positiony=TOP_OFFSET; // offset from the top of the screen
int line_num;
char temp[MAX_LINE_LEN+1];
window( 1, 7, 80, 24 );
clrscr();
textcolor( YELLOW );
if ( found )
cputs_center( 1, "Use %c %c keys to select phone number then "
"press ENTER. Press ESC to go back",0x18,0x19);
else
{
cputs_center( 1, "Use %c %c keys to scroll. Press Esc to go "
"back",0x18,0x19);
cputs_center(17, "Go back try again.");
}
cputs_center(16,"=================================================="
"===========================");
window( 1, 8, 80, 25);
if ( !found )
{
sprintf(temp," No phone number found for this area code: %s ",area_code);
cputs_center(15, temp);
}
textcolor( WHITE );
start = Display( start, BOTTOM_OFFSET );
line_num = 1;
HighliTxt(line_num,positiony,RED,YELLOW);
no_cursor();
for( ;; )
{
while( bioskey( 1 ) == 0 ); /** wait for a key **/
key = bioskey( 0 );
switch( key )
{
case UP: /** display previous line **/
if (positiony-TOP_OFFSET>0 && positiony-TOP_OFFSET <= (LINES_PER_SCREEN-BOTTOM_OFFSET))
{
--line_num;
--positiony;
HighliTxt(line_num+1,positiony+1,BLUE,WHITE);
HighliTxt(line_num,positiony,RED,YELLOW);
}
else
{
if( start <= (LINES_PER_SCREEN-BOTTOM_OFFSET) )
break;
window( 1, TOP_OFFSET, 80, 25-BOTTOM_OFFSET );
// textbackground(BLUE);
// textcolor(WHITE);
textattr(0x1F);
clrscr();
start = Display((start-(LINES_PER_SCREEN-BOTTOM_OFFSET))-1,BOTTOM_OFFSET);
--line_num;
HighliTxt(line_num,positiony,RED,YELLOW);
}
break;
case DOWN: /** display next line **/
if (positiony-TOP_OFFSET < (LINES_PER_SCREEN-BOTTOM_OFFSET) - 1)
{
if (positiony-TOP_OFFSET < num_lines-1)
{
++line_num;
++positiony;
HighliTxt(line_num-1,positiony-1,BLUE,WHITE);
HighliTxt(line_num,positiony,RED,YELLOW);
}
}
else
{
if( start >= num_lines )
break;
window( 1, TOP_OFFSET, 80, 25-BOTTOM_OFFSET );
// textbackground(BLUE);
// textcolor(WHITE);
textattr(0x1F);
clrscr();
start = Display((start-(LINES_PER_SCREEN-BOTTOM_OFFSET))+1,BOTTOM_OFFSET);
++line_num;
HighliTxt(line_num,positiony,RED,YELLOW);
}
break;
case INFO_RETURN: // RETURN
if ( !found )
{
/// window(1,22,80,24);
///// textbackground(BLUE);
///// textcolor(WHITE);
/// textattr(0x1F);
/// ret = PromptPhoneNum();
/// return ret;
}
else
{
ret = SelectedTxt(line_num, positiony);
if (ret != INVALID)
return ret;
}
break;
case ESC_SCAN:
case CTRL_C:
clr_line( 18 );
window( 1, 1, 80, 25 );
return ERROR;
} /** END-SWITCH key **/
no_cursor();
}
}
/**
*** GetNum -- prompt for area code and display num
**/
int GetNum( int info1_2 )
{
char num[6], code[4], **ptr, **buf_ptr, line[MAX_LINE_LEN+1];
int savex, savey, i, eol;
int ans, found, ret;
do
{
// found=0;
colorwindow( menu, BLUE, -1, 0 );
textcolor(WHITE);
i = eol = 0;
cputs_center( 7, "Press ESC to go back" );
cputs_center( 5, "Enter your 3 digit Area Code : " );
savex = wherex();
savey = wherey();
window(savex,savey+6,savex+3,savey+6);
// textbackground(RED);
// textcolor(YELLOW);
textattr(0x4E);
savex = wherex();
savey = wherey();
do {
gotoxy( savex, savey );
clreol();
if ( i == 3 )
{
code[3]=NULL; cputsxy(1,1,code);
}
code[i] = getche() ;
switch( code[i] )
{
case ESC : return ERROR;
case RETURN :
if ( i > 2 )
eol = 1;
break;
case BACK_SPACE :
if( i > 0 )
{
savex--; i--;
}
break;
default :
if( i < 3 )
{
savex++; i++;
}
}
} while( !eol );
code[3] = NULL;
sprintf( num, " %.3s ", code );
strcpy(area_code,code);
ret = GetLocalPhone(num, info1_2);
} while (ret != SUCCESS);
return SUCCESS;
}
int GetLocalPhone(char *num, int info1_2 )
{
char code[4], **ptr, **buf_ptr, line[MAX_LINE_LEN+1];
int savex, savey, i, eol;
int ans, found, ret;
do
{
found = 0;
no_cursor();
// sprintf( num, " %.3s ", code );
// strcpy(area_code,num);
if( GetFile( PHONE_FILE ) <= 0 )
return ERROR;
buf_ptr = ptr = file_buffer;
num_lines = 0;
// textbackground(BLUE);
// textcolor(WHITE);
textattr(0x1F);
while( *ptr )
{
if( strstr( *ptr, "--" ) != NULL || strstr( *ptr, num ) != NULL )
{
if ( !found && strstr(*ptr,num) != NULL )
found = 1;
*buf_ptr = (char*)realloc( *buf_ptr, strlen( *ptr ) + 1 );
strcpy( *buf_ptr, *ptr );
buf_ptr++;
num_lines++;
}
ptr++;
}
/**buf_ptr = (char*) NULL;*/
if (info1_2 == 2)
{
ret = Info2( found );
if (ret == ERROR || !found) break;
}
else
{
ret = Info( found );
break;
}
} while (ret != SUCCESS);
return ret;
}
/**
*** GetNum -- prompt for area code and display num
**/
///int GetNum( int info1_2 )
///{
/// char num[6], code[4], **ptr, **buf_ptr, line[MAX_LINE_LEN+1];
/// int savex, savey, i, eol;
/// int ans, found, ret;
///
/// do
/// {
/// found=0;
/// colorwindow( menu, BLUE, -1, 0 );
/// textcolor(WHITE);
/// i = eol = 0;
/// cputs_center( 7, "Press ESC to go back" );
/// cputs_center( 5, "Enter your 3 digit Area Code : " );
/// savex = wherex();
/// savey = wherey();
/// window(savex,savey+6,savex+3,savey+6);
///// textbackground(RED);
///// textcolor(YELLOW);
/// textattr(0x4E);
/// savex = wherex();
/// savey = wherey();
/// do {
/// gotoxy( savex, savey );
/// clreol();
/// if ( i == 3 )
/// {
/// code[3]=NULL; cputsxy(1,1,code);
/// }
/// code[i] = getche() ;
/// switch( code[i] )
/// {
/// case ESC : return ERROR;
/// case RETURN :
/// if ( i > 2 )
/// eol = 1;
/// break;
/// case BACK_SPACE :
/// if( i > 0 )
/// {
/// savex--; i--;
/// }
/// break;
/// default :
/// if( i < 3 )
/// {
/// savex++; i++;
/// }
/// }
/// } while( !eol );
/// no_cursor();
///
/// sprintf( num, " %.3s ", code );
/// if( GetFile( PHONE_FILE ) <= 0 )
/// return ERROR;
///
/// buf_ptr = ptr = file_buffer;
/// num_lines = 0;
///
///// textbackground(BLUE);
///// textcolor(WHITE);
/// textattr(0x1F);
/// while( *ptr )
/// {
/// if( strstr( *ptr, "--" ) != NULL || strstr( *ptr, num ) != NULL )
/// {
/// if ( !found && strstr(*ptr,num) != NULL )
/// found = 1;
/// *buf_ptr = (char*)realloc( *buf_ptr, strlen( *ptr ) + 1 );
/// strcpy( *buf_ptr, *ptr );
/// buf_ptr++;
/// num_lines++;
/// }
/// ptr++;
/// }
/// /**buf_ptr = (char*) NULL;*/
/// if (info1_2 == 2)
/// ret = Info2( found );
/// else
/// ret = Info( found );
/// } while (ret != SUCCESS);
/// return SUCCESS;
///}
void HighliTxt(int line_number, int positiony, int bgcolor, int txtcolor)
{
char **ptr;
char str[100];
window(2,positiony,39,positiony);
textbackground(bgcolor);
clrscr();
window(2,positiony,40,positiony);
textcolor(txtcolor);
ptr = file_buffer + (line_number - 1);
strcpy(str,*ptr);
if (str[strlen(str)-1] == '\n' || str[strlen(str)-1] == '\r')
str[strlen(str)-1] = '\0';
if (str[strlen(str)-2] == '\r' || str[strlen(str)-2] == '\n')
str[strlen(str)-2] = '\0';
cputsxy(1,1,"%s",str);
}
int SelectedTxt(int line_number, int y)
{
int i, j, savex;
char **ptr, str[100], ch;
ptr = file_buffer + (line_number - 1);
strcpy(str,*ptr);
if ( strstr(*ptr,"--") != NULL)
return INVALID;
HighliTxt(line_number,y,CYAN,YELLOW);
j = 0;
memset(term.phone_num,NULL,PHONE_NUM_LEN);
for (i=30; i < 38; ++i)
term.phone_num[j++] = str[i];
window(1,23,80,24);
// textbackground(BLUE);
// textcolor(WHITE);
textattr(0x1F);
cputsxy(24,1,"Selected phone number: ");
savex=wherex();
// textbackground(RED); textcolor(YELLOW);
textattr(0x4E);
window(savex,23,savex+strlen(term.phone_num),23);
cputs(term.phone_num);
window(1,25,80,25);
// textbackground(BLUE); textcolor(WHIE);
textattr(0x1F);
cputs_center(1,"Press ENTER to continue or ESC to go back");
do
{
no_cursor();
ch=getch();
} while ( ch != ESC && ch != RETURN );
clrscr();
if (ch == ESC)
return ERROR2;
return SUCCESS;
}
/**
*** Display -- displays NUM_LINES_PER_SCREEN of readme starting at start
**/
int Display( int start, int bottom )
{
int i, y = 1;
char **ptr;
if( start < 0 ) /** at begining of array **/
start = 0;
if( start + (LINES_PER_SCREEN-bottom) > num_lines ) /** at end of array **/
{
if(( start = num_lines - (LINES_PER_SCREEN-bottom) ) < 0 )
start = 0 ;
}
/*clrscr();*/
ptr = file_buffer + start;
for( i = start; i < (LINES_PER_SCREEN-bottom) + start && i < num_lines; i++ )
{
gotoxy( 2, y++ );
clreol();
if( !*ptr )
break;
cputs( *ptr++ );
}
return( i );
}
/**
*** GetFile
**/
int GetFile( char *filename )
{
int ret;
ret = LoadFile( filename );
if( ret <= 0 )
{
colorwindow( menu, BLUE, -1, 0 );
textcolor(WHITE);
if( ret == 0 )
cputs_center( 5, "ERROR : empty file : %s", filename );
else
{
if( ret == -1 )
cputs_center( 5, "ERROR : opening %s : %s", filename,
sys_errlist[ errno ] );
else
cputs_center( 5, "ERROR : not enough memory to display text" );
}
cputs_center(7, "Press any key");
getch();
window( 1, 1, 80, 25 );
return ret;
}
return( ret );
}
/**
*** LoadFile -- loads readme file into pointers
**/
int LoadFile( char *fname )
{
FILE *fp;
char **ptr, buf[MAX_LINE_LEN+1];
if(( fp = fopen( fname, "rb" )) == NULL )
return( -1 ); /** file not found **/
if(( ptr = file_buffer = (char**) calloc( MAX_LINES + 1, sizeof(char*) )) == NULL )
return( -2 );
num_lines = 0;
for( ;; )
{
if( fgets( buf, sizeof(buf), fp ) == (char*)NULL )
break; /** end of file or error **/
if(( *ptr = strdup( buf )) == (char*) NULL )
return( -2 ); /** error allocating **/
ptr++;
num_lines++;
}
*ptr = (char*) NULL;
fclose( fp );
return( num_lines );
}
/**
*** kill_data -- kills data alloctated to pointers
**/
void kill_data( char **data )
{
char **p = data;
if( !data )
return;
while( *data )
{
free( *data );
*data++ = (char*)NULL;
}
free( p );
p = (char**) NULL;
}
/** EOF : signup.c **/